﻿using AtomUI.Controls;
using Autofac;
using AutofacSerilogIntegration;
using Avalonia;
using Avalonia.Markup.Xaml;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using SD.App.Desktop;
using SD.App.Desktop.Repository;
using SD.App.Desktop.Service;
using SD.App.Desktop.Utils;
using SD.App.Desktop.ViewModels;
using SD.App.Desktop.Views;
using Serilog;

namespace SD.Desktop;

public partial class App : Application
{
    //// 定义 DI 容器
    //public IServiceProvider Services { get; set; }
    // 替换为 Autofac 的 IContainer（核心容器）
    public IContainer Container { get; private set; }

    public App()
    {
        Log.Information("应用启动中，初始化 Autofac 容器...");

        // 2. 配置 Autofac 容器（核心步骤）
        var builder = new ContainerBuilder();

        // 1. 先注册日志模块（确保 ILogger 可用）
        builder.RegisterModule<LoggerModule>();
         
        // 2. 先注册配置文件模块
        builder.RegisterModule<ConfigurationModule>();

        // 2. 再注册自动注册模块（依赖 ILogger）
        builder.RegisterModule<AutofacAutoRegisterModule>();

        builder.RegisterModule<SqlSugarModule>(); // 新增：加载 SqlSugar 模块

        // 3. 构建 Autofac 容器
        Container = builder.Build();

        Log.Information("Autofac 容器初始化成功");
    }

    public override void Initialize()
    {
        AvaloniaXamlLoader.Load(this);
    }


    protected Login CreateLoginWindow()
    {
        //// 从 DI 容器获取 ViewModel（注入 WindowMessageManager）
        //var loginViewModel = Services.GetRequiredService<LoginViewModel>();

        // 从 Autofac 容器获取 ViewModel（自动注入依赖：ILogger、IMessageService）
        var loginViewModel = Container.Resolve<LoginViewModel>();
        return new Login() { DataContext = loginViewModel };
    }

    protected Register CreateRegisterWindow()
    {
        // 从 Autofac 容器获取 ViewModel（自动注入依赖：ILogger、IMessageService）
        var registerViewModel = Container.Resolve<RegisterViewModel>();
        return new Register() { DataContext = registerViewModel };
    }


    public override void RegisterServices()
    {
        base.RegisterServices();
    }
}